home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-02-08 | 52.6 KB | 1,947 lines |
- Subject: v12i028: NetHack3 - display oriented dungeons & dragons (Ver. 3.0), Patch10d
- Newsgroups: comp.sources.games
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
- Posting-number: Volume 12, Issue 28
- Archive-name: NetHack3/Patch10d
- Patch-To: NetHack3: Volume 7, Issue 56-93
- Environment:
-
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 4 (of 8)."
- # Contents: patch10.04
- # Wrapped by billr@saab on Fri Feb 8 17:18:59 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'patch10.04' -a "${1}" != "-c" ; then
- echo shar: Renaming existing file \"'patch10.04'\" to \"'patch10.04.orig'\"
- mv -f 'patch10.04' 'patch10.04.orig'
- fi
- echo shar: Extracting \"'patch10.04'\" \(50321 characters\)
- sed "s/^X//" >'patch10.04' <<'END_OF_FILE'
- X*** others/Makefile.os2 Mon May 21 22:15:49 1990
- X--- others/Makefile.os2 Tue Jan 15 17:48:17 1991
- X***************
- X*** 1,5 ****
- X! # SCCS Id: @(#)Makefile.os2 3.0 90/02/22
- X! # OS/2 NetHack 3.0 Makefile for Microsoft(tm) C 5.1 -- Timo Hakulinen
- X #
- X # NDMAKE ver 4.5 or MS-NMAKE is required, MS-MAKE will not work.
- X # To enable either make utility, uncomment the respective
- X--- 1,6 ----
- X! # SCCS Id: @(#)Makefile.os2 3.0 91/01/13
- X! # OS/2 NetHack 3.0 Makefile for Microsoft(tm) C 5.1 and 6.0
- X! # -- Timo Hakulinen
- X #
- X # NDMAKE ver 4.5 or MS-NMAKE is required, MS-MAKE will not work.
- X # To enable either make utility, uncomment the respective
- X***************
- X*** 27,38 ****
- X
- X # Enable the upper three lines for NDMAKE and lower three for MS-NMAKE.
- X # ($(MAKE) macro is often predefined, so we use $(MAKEBIN) instead).
- X! MAKEBIN = make
- X! AB = $*.c
- X! CB = $*.c
- X! #MAKEBIN = nmake
- X! #AB = $(@B).c
- X! #CB = $$(@B).c
- X
- X # For those of us who have these on PC.
- X #YACC = yacc
- X--- 28,39 ----
- X
- X # Enable the upper three lines for NDMAKE and lower three for MS-NMAKE.
- X # ($(MAKE) macro is often predefined, so we use $(MAKEBIN) instead).
- X! #MAKEBIN = make
- X! #AB = $*.c
- X! #CB = $*.c
- X! MAKEBIN = nmake
- X! AB = $(@B).c
- X! CB = $$(@B).c
- X
- X # For those of us who have these on PC.
- X #YACC = yacc
- X***************
- X*** 45,72 ****
- X LEXYYC = lexyy.c
- X
- X # Directories (makedefs hardcodes these, don't change them).
- X! INCL = ..\include
- X! AUX = ..\auxil
- X! SRC = ..\src
- X! OBJ = $(SRC)\o2
- X
- X # The game name and description.
- X GAME = nethack
- X GAMEDES = NetHack 3.0
- X
- X- # The game directory.
- X- GAMEDIR = \games\$(GAME)
- X-
- X # Memory model, compile only, disable optimization, remove stack probes,
- X # 80286 instruction set, dedicated datasegment for items >= 5 bytes,
- X # pack structures on 1 byte boundaries, generate code for 8087
- X # coprocessor, compiler warning level, include file path.
- X! CFLAGS = /AL /c /Od /Gs /G2 /Gt5 /Zp1 /FPi87 /W1 /I$(INCL) $(CDFLAGS)
- X
- X # + prepare for CodeView symbolic debugger.
- X CDFLAGS =
- X #CDFLAGS = /Zi
- X
- X # Don't ignore case in symbols, no default lib search, stack 4096 bytes.
- X # (actually a bit of overkill), allow max 1024 segments in program.
- X LFLAGS = /noig /nod /stack:4096 /seg:1024 $(LDFLAGS)
- X--- 46,79 ----
- X LEXYYC = lexyy.c
- X
- X # Directories (makedefs hardcodes these, don't change them).
- X! INCL = ..\include # NetHack include files
- X! AUX = ..\auxil # NetHack data and documentation
- X! SRC = ..\src # NetHack source
- X
- X+ # Modifiable directories.
- X+ OBJ = $(SRC)\o2 # Object files
- X+ PLIBP = c:\libp # Protected mode C libraries
- X+ RLIBP = c:\lib # Real mode C libraries
- X+ GAMEDIR = \games\nethack # The game directory
- X+
- X # The game name and description.
- X GAME = nethack
- X GAMEDES = NetHack 3.0
- X
- X # Memory model, compile only, disable optimization, remove stack probes,
- X # 80286 instruction set, dedicated datasegment for items >= 5 bytes,
- X # pack structures on 1 byte boundaries, generate code for 8087
- X # coprocessor, compiler warning level, include file path.
- X! CFLAGS = /AL /c /Od /Gs /G2 /Gt5 /Zp1 /FPi /W1 /I$(INCL) $(CDFLAGS) $(STDC)
- X
- X # + prepare for CodeView symbolic debugger.
- X CDFLAGS =
- X #CDFLAGS = /Zi
- X
- X+ # Disable for MSC 5.1, enable for 6.0.
- X+ STDC =
- X+ #STDC = /D__STDC__
- X+
- X # Don't ignore case in symbols, no default lib search, stack 4096 bytes.
- X # (actually a bit of overkill), allow max 1024 segments in program.
- X LFLAGS = /noig /nod /stack:4096 /seg:1024 $(LDFLAGS)
- X***************
- X*** 75,89 ****
- X LDFLAGS =
- X #LDFLAGS = /CO
- X
- X! # Protected mode C libraries for 8087 (change if necessary),
- X! # OS/2 API entry points.
- X! PLIBS = llibc7p doscalls
- X
- X # C libraries used by makedefs and lev_comp (change if necessary).
- X # If compilation is done in DOS, enable the upper line, if in OS/2,
- X # the lower (protected mode libraries).
- X! RLIBS = llibc7r
- X! #RLIBS = $(PLIBS)
- X
- X # Module definition file for OS/2.
- X OS2DEFS = $(GAME).def
- X--- 82,98 ----
- X LDFLAGS =
- X #LDFLAGS = /CO
- X
- X! # Protected mode C libraries for 8087 emulation (change if necessary),
- X! # OS/2 API entry points. For MSC 5.1, enable the upper line
- X! # for 6.0 the lower.
- X! PLIBS = $(PLIBP)\llibcep $(PLIBP)\doscalls
- X! #PLIBS = $(PLIBP)\llibcep $(PLIBP)\os2
- X
- X # C libraries used by makedefs and lev_comp (change if necessary).
- X # If compilation is done in DOS, enable the upper line, if in OS/2,
- X # the lower (protected mode libraries).
- X! #RLIBS = $(RLIBP)\llibcer
- X! RLIBS = $(PLIBS)
- X
- X # Module definition file for OS/2.
- X OS2DEFS = $(GAME).def
- X*** others/lev_lex.c Sun Jun 3 15:03:37 1990
- X--- others/lev_lex.c Tue Feb 5 11:36:47 1991
- X***************
- X*** 161,170 ****
- X--- 161,178 ----
- X int NDECL (yyinput);
- X int NDECL (yywrap);
- X int NDECL (yylex);
- X+ # ifdef NeXT
- X+ void FDECL (yyunput, (int));
- X+ void FDECL (yyoutput, (int));
- X+ # else
- X int FDECL (yyunput, (int));
- X int FDECL (yyoutput, (int));
- X+ # endif
- X #endif
- X
- X+ void FDECL (init_yyin, (FILE *));
- X+ void FDECL (init_yyout, (FILE *));
- X+
- X #ifdef MSDOS
- X #undef exit
- X extern void FDECL(exit, (int));
- X***************
- X*** 197,203 ****
- X #define YYLMAX 2048
- X
- X #define MAPC 1
- X! # line 62 "lev_comp.l"
- X #define YY_END_OF_BUFFER 57
- X typedef int yy_state_type;
- X static const short int yy_accept[274] =
- X--- 205,211 ----
- X #define YYLMAX 2048
- X
- X #define MAPC 1
- X! # line 70 "lev_comp.l"
- X #define YY_END_OF_BUFFER 57
- X typedef int yy_state_type;
- X static const short int yy_accept[274] =
- X***************
- X*** 585,596 ****
- X continue; /* go to "YY_DO_BEFORE_ACTION" */
- X
- X case 1:
- X! # line 63 "lev_comp.l"
- X { line_number++; yymore(); }
- X YY_BREAK
- X case 2:
- X! # line 64 "lev_comp.l"
- X! { BEGIN 0;
- X line_number++;
- X yytext[yyleng-7] = 0; /* Discard \nENDMAP */
- X yylval.map = (char *) alloc(strlen(yytext)+1);
- X--- 593,617 ----
- X continue; /* go to "YY_DO_BEFORE_ACTION" */
- X
- X case 1:
- X! # line 71 "lev_comp.l"
- X { line_number++; yymore(); }
- X YY_BREAK
- X case 2:
- X! # line 72 "lev_comp.l"
- X! {
- X! #ifdef FLEX_SCANNER
- X! /*
- X! * There is a bug in Flex 2.3 patch level < 6
- X! * (absent in previous versions)
- X! * that results in the following behaviour :
- X! * Once you enter an yymore(), you never exit from it.
- X! * This should do the trick!
- X! */
- X! extern int yy_more_len;
- X!
- X! yy_more_len = 0;
- X! #endif
- X! BEGIN 0;
- X line_number++;
- X yytext[yyleng-7] = 0; /* Discard \nENDMAP */
- X yylval.map = (char *) alloc(strlen(yytext)+1);
- X***************
- X*** 599,797 ****
- X }
- X YY_BREAK
- X case 3:
- X! # line 71 "lev_comp.l"
- X { line_number++; }
- X YY_BREAK
- X case 4:
- X! # line 72 "lev_comp.l"
- X return MAZE_ID;
- X YY_BREAK
- X case 5:
- X! # line 73 "lev_comp.l"
- X return LEVEL_ID;
- X YY_BREAK
- X case 6:
- X! # line 74 "lev_comp.l"
- X return GEOMETRY_ID;
- X YY_BREAK
- X case 7:
- X! # line 75 "lev_comp.l"
- X { BEGIN MAPC; line_number++; }
- X YY_BREAK
- X case 8:
- X! # line 76 "lev_comp.l"
- X return OBJECT_ID;
- X YY_BREAK
- X case 9:
- X! # line 77 "lev_comp.l"
- X return MONSTER_ID;
- X YY_BREAK
- X case 10:
- X! # line 78 "lev_comp.l"
- X return TRAP_ID;
- X YY_BREAK
- X case 11:
- X! # line 79 "lev_comp.l"
- X return DOOR_ID;
- X YY_BREAK
- X case 12:
- X! # line 80 "lev_comp.l"
- X return DRAWBRIDGE_ID;
- X YY_BREAK
- X case 13:
- X! # line 81 "lev_comp.l"
- X return MAZEWALK_ID;
- X YY_BREAK
- X case 14:
- X! # line 82 "lev_comp.l"
- X return REGION_ID;
- X YY_BREAK
- X case 15:
- X! # line 83 "lev_comp.l"
- X return RANDOM_OBJECTS_ID;
- X YY_BREAK
- X case 16:
- X! # line 84 "lev_comp.l"
- X return RANDOM_MONSTERS_ID;
- X YY_BREAK
- X case 17:
- X! # line 85 "lev_comp.l"
- X return RANDOM_PLACES_ID;
- X YY_BREAK
- X case 18:
- X! # line 86 "lev_comp.l"
- X return ALTAR_ID;
- X YY_BREAK
- X case 19:
- X! # line 87 "lev_comp.l"
- X return LADDER_ID;
- X YY_BREAK
- X case 20:
- X! # line 88 "lev_comp.l"
- X return NON_DIGGABLE_ID;
- X YY_BREAK
- X case 21:
- X! # line 89 "lev_comp.l"
- X return ROOM_ID;
- X YY_BREAK
- X case 22:
- X! # line 90 "lev_comp.l"
- X { yylval.i=D_ISOPEN; return DOOR_STATE; }
- X YY_BREAK
- X case 23:
- X! # line 91 "lev_comp.l"
- X { yylval.i=D_CLOSED; return DOOR_STATE; }
- X YY_BREAK
- X case 24:
- X! # line 92 "lev_comp.l"
- X { yylval.i=D_LOCKED; return DOOR_STATE; }
- X YY_BREAK
- X case 25:
- X! # line 93 "lev_comp.l"
- X { yylval.i=D_NODOOR; return DOOR_STATE; }
- X YY_BREAK
- X case 26:
- X! # line 94 "lev_comp.l"
- X { yylval.i=D_BROKEN; return DOOR_STATE; }
- X YY_BREAK
- X case 27:
- X! # line 95 "lev_comp.l"
- X { yylval.i=W_NORTH; return DIRECTION; }
- X YY_BREAK
- X case 28:
- X! # line 96 "lev_comp.l"
- X { yylval.i=W_EAST; return DIRECTION; }
- X YY_BREAK
- X case 29:
- X! # line 97 "lev_comp.l"
- X { yylval.i=W_SOUTH; return DIRECTION; }
- X YY_BREAK
- X case 30:
- X! # line 98 "lev_comp.l"
- X { yylval.i=W_WEST; return DIRECTION; }
- X YY_BREAK
- X case 31:
- X! # line 99 "lev_comp.l"
- X { yylval.i = -1; return RANDOM_TYPE; }
- X YY_BREAK
- X case 32:
- X! # line 100 "lev_comp.l"
- X return O_REGISTER;
- X YY_BREAK
- X case 33:
- X! # line 101 "lev_comp.l"
- X return M_REGISTER;
- X YY_BREAK
- X case 34:
- X! # line 102 "lev_comp.l"
- X return P_REGISTER;
- X YY_BREAK
- X case 35:
- X! # line 103 "lev_comp.l"
- X return A_REGISTER;
- X YY_BREAK
- X case 36:
- X! # line 104 "lev_comp.l"
- X { yylval.i=1; return LEFT_OR_RIGHT; }
- X YY_BREAK
- X case 37:
- X! # line 105 "lev_comp.l"
- X { yylval.i=3; return LEFT_OR_RIGHT; }
- X YY_BREAK
- X case 38:
- X! # line 106 "lev_comp.l"
- X { yylval.i=2; return CENTER; }
- X YY_BREAK
- X case 39:
- X! # line 107 "lev_comp.l"
- X { yylval.i=1; return TOP_OR_BOT; }
- X YY_BREAK
- X case 40:
- X! # line 108 "lev_comp.l"
- X { yylval.i=3; return TOP_OR_BOT; }
- X YY_BREAK
- X case 41:
- X! # line 109 "lev_comp.l"
- X { yylval.i=1; return LIGHT_STATE; }
- X YY_BREAK
- X case 42:
- X! # line 110 "lev_comp.l"
- X { yylval.i=0; return LIGHT_STATE; }
- X YY_BREAK
- X case 43:
- X! # line 111 "lev_comp.l"
- X { yylval.i=A_LAW; return ALIGNMENT; }
- X YY_BREAK
- X case 44:
- X! # line 112 "lev_comp.l"
- X { yylval.i=A_NEUTRAL; return ALIGNMENT; }
- X YY_BREAK
- X case 45:
- X! # line 113 "lev_comp.l"
- X { yylval.i=A_CHAOS; return ALIGNMENT; }
- X YY_BREAK
- X case 46:
- X! # line 114 "lev_comp.l"
- X { yylval.i=1; return ALTAR_TYPE; }
- X YY_BREAK
- X case 47:
- X! # line 115 "lev_comp.l"
- X { yylval.i=0; return ALTAR_TYPE; }
- X YY_BREAK
- X case 48:
- X! # line 116 "lev_comp.l"
- X { yylval.i=1; return UP_OR_DOWN; }
- X YY_BREAK
- X case 49:
- X! # line 117 "lev_comp.l"
- X { yylval.i=0; return UP_OR_DOWN; }
- X YY_BREAK
- X case 50:
- X! # line 118 "lev_comp.l"
- X { yylval.i=atoi(yytext); return INTEGER; }
- X YY_BREAK
- X case 51:
- X! # line 119 "lev_comp.l"
- X { yytext[yyleng-1] = 0; /* Discard the trailing \" */
- X yylval.map = (char *) alloc(strlen(yytext+1)+1);
- X strcpy(yylval.map, yytext+1); /* Discard the first \" */
- X--- 620,818 ----
- X }
- X YY_BREAK
- X case 3:
- X! # line 92 "lev_comp.l"
- X { line_number++; }
- X YY_BREAK
- X case 4:
- X! # line 93 "lev_comp.l"
- X return MAZE_ID;
- X YY_BREAK
- X case 5:
- X! # line 94 "lev_comp.l"
- X return LEVEL_ID;
- X YY_BREAK
- X case 6:
- X! # line 95 "lev_comp.l"
- X return GEOMETRY_ID;
- X YY_BREAK
- X case 7:
- X! # line 96 "lev_comp.l"
- X { BEGIN MAPC; line_number++; }
- X YY_BREAK
- X case 8:
- X! # line 97 "lev_comp.l"
- X return OBJECT_ID;
- X YY_BREAK
- X case 9:
- X! # line 98 "lev_comp.l"
- X return MONSTER_ID;
- X YY_BREAK
- X case 10:
- X! # line 99 "lev_comp.l"
- X return TRAP_ID;
- X YY_BREAK
- X case 11:
- X! # line 100 "lev_comp.l"
- X return DOOR_ID;
- X YY_BREAK
- X case 12:
- X! # line 101 "lev_comp.l"
- X return DRAWBRIDGE_ID;
- X YY_BREAK
- X case 13:
- X! # line 102 "lev_comp.l"
- X return MAZEWALK_ID;
- X YY_BREAK
- X case 14:
- X! # line 103 "lev_comp.l"
- X return REGION_ID;
- X YY_BREAK
- X case 15:
- X! # line 104 "lev_comp.l"
- X return RANDOM_OBJECTS_ID;
- X YY_BREAK
- X case 16:
- X! # line 105 "lev_comp.l"
- X return RANDOM_MONSTERS_ID;
- X YY_BREAK
- X case 17:
- X! # line 106 "lev_comp.l"
- X return RANDOM_PLACES_ID;
- X YY_BREAK
- X case 18:
- X! # line 107 "lev_comp.l"
- X return ALTAR_ID;
- X YY_BREAK
- X case 19:
- X! # line 108 "lev_comp.l"
- X return LADDER_ID;
- X YY_BREAK
- X case 20:
- X! # line 109 "lev_comp.l"
- X return NON_DIGGABLE_ID;
- X YY_BREAK
- X case 21:
- X! # line 110 "lev_comp.l"
- X return ROOM_ID;
- X YY_BREAK
- X case 22:
- X! # line 111 "lev_comp.l"
- X { yylval.i=D_ISOPEN; return DOOR_STATE; }
- X YY_BREAK
- X case 23:
- X! # line 112 "lev_comp.l"
- X { yylval.i=D_CLOSED; return DOOR_STATE; }
- X YY_BREAK
- X case 24:
- X! # line 113 "lev_comp.l"
- X { yylval.i=D_LOCKED; return DOOR_STATE; }
- X YY_BREAK
- X case 25:
- X! # line 114 "lev_comp.l"
- X { yylval.i=D_NODOOR; return DOOR_STATE; }
- X YY_BREAK
- X case 26:
- X! # line 115 "lev_comp.l"
- X { yylval.i=D_BROKEN; return DOOR_STATE; }
- X YY_BREAK
- X case 27:
- X! # line 116 "lev_comp.l"
- X { yylval.i=W_NORTH; return DIRECTION; }
- X YY_BREAK
- X case 28:
- X! # line 117 "lev_comp.l"
- X { yylval.i=W_EAST; return DIRECTION; }
- X YY_BREAK
- X case 29:
- X! # line 118 "lev_comp.l"
- X { yylval.i=W_SOUTH; return DIRECTION; }
- X YY_BREAK
- X case 30:
- X! # line 119 "lev_comp.l"
- X { yylval.i=W_WEST; return DIRECTION; }
- X YY_BREAK
- X case 31:
- X! # line 120 "lev_comp.l"
- X { yylval.i = -1; return RANDOM_TYPE; }
- X YY_BREAK
- X case 32:
- X! # line 121 "lev_comp.l"
- X return O_REGISTER;
- X YY_BREAK
- X case 33:
- X! # line 122 "lev_comp.l"
- X return M_REGISTER;
- X YY_BREAK
- X case 34:
- X! # line 123 "lev_comp.l"
- X return P_REGISTER;
- X YY_BREAK
- X case 35:
- X! # line 124 "lev_comp.l"
- X return A_REGISTER;
- X YY_BREAK
- X case 36:
- X! # line 125 "lev_comp.l"
- X { yylval.i=1; return LEFT_OR_RIGHT; }
- X YY_BREAK
- X case 37:
- X! # line 126 "lev_comp.l"
- X { yylval.i=3; return LEFT_OR_RIGHT; }
- X YY_BREAK
- X case 38:
- X! # line 127 "lev_comp.l"
- X { yylval.i=2; return CENTER; }
- X YY_BREAK
- X case 39:
- X! # line 128 "lev_comp.l"
- X { yylval.i=1; return TOP_OR_BOT; }
- X YY_BREAK
- X case 40:
- X! # line 129 "lev_comp.l"
- X { yylval.i=3; return TOP_OR_BOT; }
- X YY_BREAK
- X case 41:
- X! # line 130 "lev_comp.l"
- X { yylval.i=1; return LIGHT_STATE; }
- X YY_BREAK
- X case 42:
- X! # line 131 "lev_comp.l"
- X { yylval.i=0; return LIGHT_STATE; }
- X YY_BREAK
- X case 43:
- X! # line 132 "lev_comp.l"
- X { yylval.i=A_LAW; return ALIGNMENT; }
- X YY_BREAK
- X case 44:
- X! # line 133 "lev_comp.l"
- X { yylval.i=A_NEUTRAL; return ALIGNMENT; }
- X YY_BREAK
- X case 45:
- X! # line 134 "lev_comp.l"
- X { yylval.i=A_CHAOS; return ALIGNMENT; }
- X YY_BREAK
- X case 46:
- X! # line 135 "lev_comp.l"
- X { yylval.i=1; return ALTAR_TYPE; }
- X YY_BREAK
- X case 47:
- X! # line 136 "lev_comp.l"
- X { yylval.i=0; return ALTAR_TYPE; }
- X YY_BREAK
- X case 48:
- X! # line 137 "lev_comp.l"
- X { yylval.i=1; return UP_OR_DOWN; }
- X YY_BREAK
- X case 49:
- X! # line 138 "lev_comp.l"
- X { yylval.i=0; return UP_OR_DOWN; }
- X YY_BREAK
- X case 50:
- X! # line 139 "lev_comp.l"
- X { yylval.i=atoi(yytext); return INTEGER; }
- X YY_BREAK
- X case 51:
- X! # line 140 "lev_comp.l"
- X { yytext[yyleng-1] = 0; /* Discard the trailing \" */
- X yylval.map = (char *) alloc(strlen(yytext+1)+1);
- X strcpy(yylval.map, yytext+1); /* Discard the first \" */
- X***************
- X*** 798,820 ****
- X return STRING; }
- X YY_BREAK
- X case 52:
- X! # line 123 "lev_comp.l"
- X { line_number++; }
- X YY_BREAK
- X case 53:
- X! # line 124 "lev_comp.l"
- X ;
- X YY_BREAK
- X case 54:
- X! # line 125 "lev_comp.l"
- X { yylval.i = yytext[1]; return CHAR; }
- X YY_BREAK
- X case 55:
- X! # line 126 "lev_comp.l"
- X { return yytext[0]; }
- X YY_BREAK
- X case 56:
- X! # line 127 "lev_comp.l"
- X ECHO;
- X YY_BREAK
- X case YY_STATE_EOF(INITIAL):
- X--- 819,841 ----
- X return STRING; }
- X YY_BREAK
- X case 52:
- X! # line 144 "lev_comp.l"
- X { line_number++; }
- X YY_BREAK
- X case 53:
- X! # line 145 "lev_comp.l"
- X ;
- X YY_BREAK
- X case 54:
- X! # line 146 "lev_comp.l"
- X { yylval.i = yytext[1]; return CHAR; }
- X YY_BREAK
- X case 55:
- X! # line 147 "lev_comp.l"
- X { return yytext[0]; }
- X YY_BREAK
- X case 56:
- X! # line 148 "lev_comp.l"
- X ECHO;
- X YY_BREAK
- X case YY_STATE_EOF(INITIAL):
- X***************
- X*** 1105,1111 ****
- X yyin = input_file;
- X yy_init = 1;
- X }
- X! # line 127 "lev_comp.l"
- X
- X #ifdef AMIGA
- X long *alloc(n)
- X--- 1126,1132 ----
- X yyin = input_file;
- X yy_init = 1;
- X }
- X! # line 148 "lev_comp.l"
- X
- X #ifdef AMIGA
- X long *alloc(n)
- X***************
- X*** 1114,1116 ****
- X--- 1135,1155 ----
- X return ((long *)malloc (n));
- X }
- X #endif
- X+
- X+ /* routine to switch to another input file; needed for flex */
- X+ void init_yyin( input_f )
- X+ FILE *input_f;
- X+ {
- X+ #ifdef FLEX_SCANNER
- X+ if (yyin != NULL)
- X+ yyrestart(input_f);
- X+ else
- X+ #endif
- X+ yyin = input_f;
- X+ }
- X+ /* analogous routine (for completeness) */
- X+ void init_yyout( output_f )
- X+ FILE *output_f;
- X+ {
- X+ yyout = output_f;
- X+ }
- X*** others/maintain.ovl Mon May 28 21:08:14 1990
- X--- others/maintain.ovl Sun Feb 3 15:09:43 1991
- X***************
- X*** 1,6 ****
- X Maintaining PC NetHack
- X! ========================
- X! Last revision: 1990may27
- X
- X The installation of the system of overlay management that currently
- X brings full-featured NetHack to the IBM PC and compatibles has
- X--- 1,6 ----
- X Maintaining PC NetHack
- X! ===========================
- X! Last revision: 1991january31
- X
- X The installation of the system of overlay management that currently
- X brings full-featured NetHack to the IBM PC and compatibles has
- X***************
- X*** 25,31 ****
- X traditional candidates for the overlaying strategy, however, NetHack
- X does not exhibit strongly phased behaviour; although much of the code
- X is not being used at any one moment, there is comparatively little
- X! code that can be confidently said not to be related to or potentially
- X necessary for the immediate progress of the game.
- X Furthermore we wished to develop an overlaying strategy that
- X did _not_ involve intimate knowledge of the operation of the
- X--- 25,31 ----
- X traditional candidates for the overlaying strategy, however, NetHack
- X does not exhibit strongly phased behaviour; although much of the code
- X is not being used at any one moment, there is comparatively little
- X! code that can confidently be said not to be related to or potentially
- X necessary for the immediate progress of the game.
- X Furthermore we wished to develop an overlaying strategy that
- X did _not_ involve intimate knowledge of the operation of the
- X***************
- X*** 83,95 ****
- X a function name is typically followed by an open parenthesis if, and
- X only if, it is being declared, defined or invoked; if its address is
- X being taken it will necessarily be followed by some other token.
- X! Furthermore (except in the unfortunate case of the ill-conceived
- X! new-style ANSI declaration of a function that takes no parameters) it
- X! will be observed that the number of parameters to a call of the
- X! function (assuming that this number is fixed; if not, I grant, we
- X! have a problem) is the same in all these contexts. This implies that
- X! if all the modules of a programme are uniformly processed in the
- X! context of a macro definition such as
- X
- X #define zook(a,b) plenk(a,b)
- X
- X--- 83,95 ----
- X a function name is typically followed by an open parenthesis if, and
- X only if, it is being declared, defined or invoked; if its address is
- X being taken it will necessarily be followed by some other token.
- X! Furthermore it will be observed that (except in the unfortunate case
- X! of the ill-conceived new-style ANSI declaration of a function that
- X! takes no parameters) the number of parameters to a call of the
- X! function (assuming that this number is fixed; if not, I grant, we have
- X! a problem) is the same in all these contexts. This implies that if all
- X! the modules of a programme are uniformly processed in the context of a
- X! macro definition such as
- X
- X #define zook(a,b) plenk(a,b)
- X
- X***************
- X*** 99,108 ****
- X map will report the existence of the function plenk() in place of
- X zook() -- UNLESS there was a place in the programme where the address
- X of zook was taken. In that case, the linker would report an
- X! unresolved external reference for that symbol.
- X That unresolved reference is, of course, precisely what we
- X need; if in another source file (one that did not see the macro
- X! definition) we placed the function declaration
- X
- X some_t zook(this_t a, that_t b)
- X { extern some_t plenk(this_t, that_t);
- X--- 99,108 ----
- X map will report the existence of the function plenk() in place of
- X zook() -- UNLESS there was a place in the programme where the address
- X of zook was taken. In that case, the linker would report an
- X! unresolved external reference for zook.
- X That unresolved reference is, of course, precisely what we
- X need; if in another source file (one that did not see the macro
- X! definition) we placed the function definition
- X
- X some_t zook(this_t a, that_t b)
- X { extern some_t plenk(this_t, that_t);
- X***************
- X*** 218,224 ****
- X is, quite daftly to my mind, that the linker considers the identity
- X of segment names and combine classes better reason to combine
- X segments than the programmer's explicit instructions in the requested
- X! overlay pattern are reason to keep them apart. Programmer, ask not
- X why...).
- X
- X Once again, that works fine except for the small matter of
- X--- 218,224 ----
- X is, quite daftly to my mind, that the linker considers the identity
- X of segment names and combine classes better reason to combine
- X segments than the programmer's explicit instructions in the requested
- X! overlay pattern is reason to keep them apart. Programmer, ask not
- X why...).
- X
- X Once again, that works fine except for the small matter of
- X***************
- X*** 301,308 ****
- X change or restructuring of the NetHack source code, which must remain
- X portable to many platforms other than the PC.
- X
- X! If these observations do not daunt you, you are a true Bit Warrior
- X! indeed (or aspiration anyway), and we await your comments with bait.
- X
- X ------------------------------------------------------------------------
- X
- X--- 301,308 ----
- X change or restructuring of the NetHack source code, which must remain
- X portable to many platforms other than the PC.
- X
- X! If these observations do not daunt you, you are a Bit Warrior indeed
- X! (or aspiration anyway), and we await your comments with bait.
- X
- X ------------------------------------------------------------------------
- X
- X***************
- X*** 331,336 ****
- X same time.
- X
- X ------------------------------------------------------------------------
- X! Stephen P Spackman stephen@tira.uchicago.edu
- X ------------------------------------------------------------------------
- X * Hack On! *
- X--- 331,336 ----
- X same time.
- X
- X ------------------------------------------------------------------------
- X! Stephen P Spackman stephen@estragon.uchicago.edu
- X ------------------------------------------------------------------------
- X * Hack On! *
- X*** others/msdos.c Tue Jun 26 21:20:12 1990
- X--- others/msdos.c Mon Feb 4 09:56:57 1991
- X***************
- X*** 1369,1374 ****
- X--- 1369,1375 ----
- X {
- X int fromfd, tofd, r;
- X char *buf;
- X+ extern genericptr_t FDECL(malloc, (size_t));
- X
- X if ((fromfd = open(from, O_RDONLY|O_BINARY, 0)) < 0)
- X return -1;
- X***************
- X*** 1393,1402 ****
- X--- 1394,1410 ----
- X init_aline()
- X {
- X # ifdef __GNUC__
- X+ /* line A calls nuke registers d0-d2,a0-a2; not all compilers regard these
- X+ as scratch registers, though, so we save them
- X+ */
- X+ asm(" moveml d0-d2/a0-a2, sp@-");
- X asm(" .word 0xa000; movel d0, __a_line");
- X+ asm(" moveml sp@+, d0-d2/a0-a2");
- X # else
- X+ asm(" movem.l d0-d2/a0-a2, -(sp)");
- X asm(" .dc.w 0xa000"); /* tweak as necessary for your compiler */
- X asm(" move.l d0, __a_line");
- X+ asm(" movem.l (sp)+, d0-d2/a0-a2");
- X # endif
- X }
- X
- X*** others/ovlmgr.asm Mon May 28 00:49:26 1990
- X--- others/ovlmgr.asm Sun Feb 3 12:33:52 1991
- X***************
- X*** 1,13 ****
- X! ; SCCS Id: @(#)ovlmgr.asm 90/05/27
- X! ; Copyright (c) 1989, 1990 Pierre Martineau and Stephen Spackman. All Rights Reserved.
- X ; This product may be freely redistributed. See NetHack license for details.
- X
- X! VERSION EQU 3081h
- X
- X PAGE 57,132
- X TITLE 'DOS Overlay Manager for MSC 5.1+'
- X! SUBTTL 'Copyright (c) 1989, 1990 Pierre Martineau and Stephen Spackman. All Rights Reserved.'
- X
- X ; acknowledgements: - Many thanks to Norm Meluch for his invaluable help
- X ; - No thanks to Microsoft
- X ; - alltrsidsctysti!!!
- X--- 1,15 ----
- X! ; SCCS Id: @(#)ovlmgr.asm 91/02/01
- X! ; Copyright (c) 1989, 1990, 1991 Pierre Martineau and Stephen Spackman. All Rights Reserved.
- X ; This product may be freely redistributed. See NetHack license for details.
- X
- X! VERSION EQU 30a0h
- X
- X PAGE 57,132
- X TITLE 'DOS Overlay Manager for MSC 5.1+'
- X! SUBTTL 'Copyright (c) 1989, 1990, 1991 Pierre Martineau and Stephen Spackman. All Rights Reserved.'
- X
- X+ ; Multiple overlay file support for v30a0 by Norm Meluch with some input from Stephen.
- X+
- X ; acknowledgements: - Many thanks to Norm Meluch for his invaluable help
- X ; - No thanks to Microsoft
- X ; - alltrsidsctysti!!!
- X***************
- X*** 20,25 ****
- X--- 22,33 ----
- X ; - the stack is preserved
- X ; - re-entrancy is not required
- X
- X+ ; options: /Di386 use 80386-specific opcodes
- X+ ; (faster, but no good for weaker machines)
- X+ ; /DNOEMS omit EMS support
- X+ ; (needed if application uses EMS)
- X+ ; /DNOSPLIT omit support for external .OVL files
- X+
- X DOSALLOC EQU 48h ; memory allocation
- X DOSFREE EQU 49h ; free allocated memory
- X DOSREALLOC EQU 4ah ; modify memory block
- X***************
- X*** 27,32 ****
- X--- 35,44 ----
- X DOSSEEK EQU 42h ; logical handle seek
- X DOSOPEN EQU 3dh ; open handle
- X DOSCLOSE EQU 3eh ; close handle
- X+ DOSSETDTA EQU 1ah ; Set Data transfer area
- X+ DOSGETDTA EQU 2fh ; Get Data transfer area
- X+ DOSSEARCH EQU 4eh ; Search for 1st file match
- X+ DOSNEXTFILE EQU 4fh ; Search for next file match
- X DOSEXEC EQU 4bh ; exec child process
- X DOSPUTC EQU 02h ; print a char
- X DOSVERSION EQU 30h ; get version number
- X***************
- X*** 41,46 ****
- X--- 53,61 ----
- X EMMALLOC EQU 43h ; allocate EMM pages
- X EMMMAP EQU 44h ; map EMM pages
- X EMMFREE EQU 45h ; free EMM pages
- X+ MAXNAMESIZE EQU 50h ; max path name size
- X+ MAXFILES EQU 0Eh ; max # of *.OVL files
- X+ EXESIGNUM EQU 5a4dh ; Exe header signature
- X CR EQU 0dh
- X LF EQU 0ah
- X ESCAPE EQU 1bh
- X***************
- X*** 57,62 ****
- X--- 72,80 ----
- X RELERR EQU 6
- X EMSERR EQU 7
- X HDRERR EQU 8
- X+ NAMERR EQU 9
- X+ OVLERR EQU 10
- X+ NOHDRERR EQU 11
- X
- X ; The following EXTRNs are supplied by the linker
- X
- X***************
- X*** 84,90 ****
- X ENDM
- X ENDIF
- X
- X! ovlflgrec RECORD locked:1=0,ems:1=0,loaded:1=0 ; overlay flags
- X
- X ; This is a dirty hack. What we need is a virtual segment that will be built
- X ; by the (our) loader in multiple copies, one per overlay. Unfortunately, this
- X--- 102,110 ----
- X ENDM
- X ENDIF
- X
- X! ovlflgrec RECORD locked:1=0,ems:1=0,loaded:1=0,file:4=0,pad:1 ; overlay flags
- X! ; "file" is the overlay file this overlay is in; 0 is the .EXE
- X! ; itself. Otherwise, the numbers are arbitrary.
- X
- X ; This is a dirty hack. What we need is a virtual segment that will be built
- X ; by the (our) loader in multiple copies, one per overlay. Unfortunately, this
- X***************
- X*** 107,113 ****
- X
- X ; NOTE: This segment definition MUST be exactly 16 bytes long
- X
- X! ovlflg ovlflgrec <0,0,0> ; overlay flags
- X ovlinvcnt DB ? ; invocation count
- X ovlmemblk DW ? ; ^ to allocated memory block
- X ovllrudat DD ? ; misc lru data (pseudo time stamp)
- X--- 127,133 ----
- X
- X ; NOTE: This segment definition MUST be exactly 16 bytes long
- X
- X! ovlflg ovlflgrec <0,0,0,0,0> ; overlay flags
- X ovlinvcnt DB ? ; invocation count
- X ovlmemblk DW ? ; ^ to allocated memory block
- X ovllrudat DD ? ; misc lru data (pseudo time stamp)
- X***************
- X*** 127,134 ****
- X
- X ovltbl ENDS
- X
- X EXEHDR STRUC ; structure of an EXE header
- X! exesign DW 5a4dh ; signature
- X exelstpgesiz DW ? ; last page size (512 byte pages)
- X exesiz DW ? ; total pages (including partial last page)
- X relocitems DW ? ; number of relocation entries
- X--- 147,165 ----
- X
- X ovltbl ENDS
- X
- X+ DTASTRUC STRUC ; internal DTA for ovlmgr
- X+ DB 21 DUP (0)
- X+ file_attr DB 0
- X+ file_time DW 0
- X+ file_date DW 0
- X+ file_size DD 0
- X+ file_name DB 9 DUP (0)
- X+ file_ext DB 3 DUP (0)
- X+ dtapad DB 86 DUP (0) ; Pad to 128 bytes
- X+ DTASTRUC ENDS
- X+
- X EXEHDR STRUC ; structure of an EXE header
- X! exesign DW EXESIGNUM ; signature
- X exelstpgesiz DW ? ; last page size (512 byte pages)
- X exesiz DW ? ; total pages (including partial last page)
- X relocitems DW ? ; number of relocation entries
- X***************
- X*** 176,182 ****
- X dsreg DW ? ; temp save area
- X ssreg DW ?
- X spreg DW ?
- X! ovlexefilhdl DW -1 ; always-open file handle of our .EXE
- X ovltblbse DW -1 ; segment of first overlay descriptor
- X memblks DW 16 DUP (-1) ; allocated memory blocks
- X memblk1st DW ? ; first memory block
- X--- 207,213 ----
- X dsreg DW ? ; temp save area
- X ssreg DW ?
- X spreg DW ?
- X! ovlfilhdl DW MAXFILES+1 DUP (-1) ; always-open file handles for .EXE, .OVL
- X ovltblbse DW -1 ; segment of first overlay descriptor
- X memblks DW 16 DUP (-1) ; allocated memory blocks
- X memblk1st DW ? ; first memory block
- X***************
- X*** 196,217 ****
- X hdr EXEHDR <> ; EXE header work area
- X DB 512-TYPE EXEHDR DUP (?) ; exe hdr buffer for relocations
- X EXEHDRTMPSIZ EQU $ - hdr ; size of temp reloc buffer
- X errortbl DW -1 ; error message pointers
- X DW OFFSET baddos
- X DW OFFSET nofile
- X DW OFFSET noroom
- X! DW OFFSET nofile
- X DW OFFSET nocore
- X DW OFFSET nocore
- X DW OFFSET badems
- X! DW OFFSET nofile
- X DW OFFSET unknown
- X DW OFFSET unknown
- X DW OFFSET unknown
- X DW OFFSET unknown
- X- DW OFFSET unknown
- X- DW OFFSET unknown
- X- DW OFFSET unknown
- X emmname DB "EMMXXXX0" ; EMM device driver name
- X emmtot DW 0 ; total emm blocks free
- X emmframesiz DW 4 ; frame size in blocks
- X--- 227,254 ----
- X hdr EXEHDR <> ; EXE header work area
- X DB 512-TYPE EXEHDR DUP (?) ; exe hdr buffer for relocations
- X EXEHDRTMPSIZ EQU $ - hdr ; size of temp reloc buffer
- X+ filestring DB MAXNAMESIZE DUP (0) ; string space for file specs
- X+ pathlen DW ? ; path length of file spec
- X+ namelen DW ? ; length of file names
- X+ ovldta DTASTRUC <> ; DTA for ovlmgr use
- X+ dtaseg DW ? ; DTA segment for program
- X+ dtaoffset DW ? ; DTA offset for program
- X errortbl DW -1 ; error message pointers
- X DW OFFSET baddos
- X DW OFFSET nofile
- X DW OFFSET noroom
- X! DW OFFSET badio
- X DW OFFSET nocore
- X DW OFFSET nocore
- X DW OFFSET badems
- X! DW OFFSET badhdr
- X! DW OFFSET badnam
- X! DW OFFSET noovl
- X! DW OFFSET nohdr
- X DW OFFSET unknown
- X DW OFFSET unknown
- X DW OFFSET unknown
- X DW OFFSET unknown
- X emmname DB "EMMXXXX0" ; EMM device driver name
- X emmtot DW 0 ; total emm blocks free
- X emmframesiz DW 4 ; frame size in blocks
- X***************
- X*** 222,236 ****
- X paragraphs DB 'H paragraphs.',CR,LF,'$'
- X emsavl DB 'EMS memory available: $'
- X pages DB 'H 16K-pages.',CR,LF,'$'
- X noroom DB 'Not enough free memory left to run this program.$'
- X nocore DB 'Internal memory allocation failure.$'
- X- nofile DB 'Inaccessible EXE file. Can',27,'t load overlays.$'
- X- baddos DB 'Incorrect DOS version. Must be 3.00 or later.$'
- X badems DB 'EMS memory manager error.$'
- X unknown DB 'Unknown error!$'
- X msghead DB ESCAPE,'[0m',ESCAPE,'[K',CR,LF,ESCAPE,'[K',ESCAPE,'[1mOVLMGR:',ESCAPE,'[0m $'
- X diag DB ESCAPE,'[K',CR,LF,ESCAPE,'[K',' ($'
- X msgtail DB ESCAPE,'[K',CR,LF,ESCAPE,'[K',BELL,'$'
- X
- X ;-------------------------------------------------------------------------------
- X
- X--- 259,279 ----
- X paragraphs DB 'H paragraphs.',CR,LF,'$'
- X emsavl DB 'EMS memory available: $'
- X pages DB 'H 16K-pages.',CR,LF,'$'
- X+ baddos DB 'Incorrect DOS version. Must be 3.00 or later.$'
- X+ nofile DB 'Inaccessible EXE file. Can',39,'t load overlays.$'
- X noroom DB 'Not enough free memory left to run this program.$'
- X+ badio DB 'File I/O error.$'
- X nocore DB 'Internal memory allocation failure.$'
- X badems DB 'EMS memory manager error.$'
- X+ badhdr DB 'Executable or overlay header missing or damaged.$'
- X+ badnam DB 'Unable to resolve overlay file names.$'
- X+ noovl DB 'Inaccessible OVL file. Can',39,'t load overlays.$'
- X+ nohdr DB 'Incomplete executable. OVL files missing?$'
- X unknown DB 'Unknown error!$'
- X msghead DB ESCAPE,'[0m',ESCAPE,'[K',CR,LF,ESCAPE,'[K',ESCAPE,'[1mOVLMGR:',ESCAPE,'[0m $'
- X diag DB ESCAPE,'[K',CR,LF,ESCAPE,'[K',' ($'
- X msgtail DB ESCAPE,'[K',CR,LF,ESCAPE,'[K',BELL,'$'
- X+ ovlext DB '?.OVL',0
- X
- X ;-------------------------------------------------------------------------------
- X
- X***************
- X*** 247,252 ****
- X--- 290,296 ----
- X push bp
- X push ds
- X push es ; save the world
- X+
- X cld
- X mov ax,ds ; get our psp
- X add ax,10h
- X***************
- X*** 265,279 ****
- X cmp WORD PTR [si],0
- X jnz envloop
- X add si,4 ; point to EXE filename
- X! mov al,0 ; access code
- X! mov ah,DOSOPEN
- X! mov dx,si
- X! int DOS ; open EXE
- X! jnc dontdie
- X! mov al,FILEERR ; can't open file!
- X! jmp putserr
- X! dontdie:
- X! mov ovlexefilhdl,ax ; save handle
- X IFNDEF NOEMS
- X chkems:
- X mov ah,DOSGETVEC
- X--- 309,316 ----
- X cmp WORD PTR [si],0
- X jnz envloop
- X add si,4 ; point to EXE filename
- X!
- X! call openfiles ; Search & open overlay files
- X IFNDEF NOEMS
- X chkems:
- X mov ah,DOSGETVEC
- X***************
- X*** 316,323 ****
- X gotovlram:
- X mov ovltblbse,ax ; overlay descriptor table begins at start of memory block
- X
- X! push cs
- X! pop ds
- X IFDEF DEBUG
- X IFDEF i386
- X mov ah,print
- X--- 353,375 ----
- X gotovlram:
- X mov ovltblbse,ax ; overlay descriptor table begins at start of memory block
- X
- X! mov cx,ovlcnt
- X! zeromem:
- X! mov es,ax
- X! mov es:ovlflg,0 ; initialise ovl flags
- X! mov es:ovlinvcnt,0 ; initialise invocation count
- X! mov es:ovlmemblk,0
- X! mov WORD PTR es:ovllrudat,0 ; initialise ovl lru
- X! mov WORD PTR es:ovllrudat+2,0
- X! mov es:ovlemshdl,-1
- X! mov es:ovlfiloff,0 ; initialize file offset
- X! mov es:ovlsiz,0 ; initialize overlay size
- X! mov es:ovlhdrsiz,0
- X! inc ax
- X! loop zeromem
- X!
- X! mov ax,cs
- X! mov ds,ax
- X IFDEF DEBUG
- X IFDEF i386
- X mov ah,print
- X***************
- X*** 357,374 ****
- X
- X xor bp,bp
- X xor di,di
- X! xor si,si
- X filsegtbllpp: ; initialise ovl table
- X call gethdr ; get an EXE header
- X mov ax,ovltblbse
- X add ax,hdr.exeovlnum
- X mov es,ax ; ^ to ovl table entry
- X! xor ax,ax
- X! mov WORD PTR ovllrudat,ax ; initialise ovl lru
- X! mov WORD PTR ovllrudat+2,ax
- X! mov ovlflg,al ; initialise ovl flags
- X! mov ovlinvcnt,al ; initialise invocation count
- X! mov ovlemshdl,-1
- X mov ax,hdr.exesiz
- X shl ax,1
- X shl ax,1
- X--- 409,426 ----
- X
- X xor bp,bp
- X xor di,di
- X! xor si,si ; file handle loop ctr
- X filsegtbllpp: ; initialise ovl table
- X call gethdr ; get an EXE header
- X+
- X mov ax,ovltblbse
- X add ax,hdr.exeovlnum
- X mov es,ax ; ^ to ovl table entry
- X! IFNDEF NOSPLIT
- X! mov cx,si ; set file # in ovlflg
- X! shl cx,1
- X! mov ovlflg,cl
- X! ENDIF
- X mov ax,hdr.exesiz
- X shl ax,1
- X shl ax,1
- X***************
- X*** 412,423 ****
- X mov al,0
- X mov ah,DOSSEEK ; seek to next ovl
- X int DOS
- X! mov ax,ovlcnt
- X dec ax
- X! cmp ax,hdr.exeovlnum ; all overlays done?
- X! jz makmemblk
- X! jmp filsegtbllpp ; Nope, go for more.
- X! makmemblk:
- X ASSUME ES:nothing ; prepare first memory block
- X
- X mov ax,ovlrootcode ; OVERLAY_AREA segment
- X--- 464,490 ----
- X mov al,0
- X mov ah,DOSSEEK ; seek to next ovl
- X int DOS
- X!
- X! mov cx,ovlcnt ; check if all overlays found
- X! mov ax,ovltblbse
- X! dec cx ; ovlcnt includes root
- X! add ax,cx
- X! ovloop:
- X! mov es,ax
- X! IFNDEF NOSPLIT
- X! mov bl,ovlflg
- X! and bx,MASK file
- X!
- X! cmp bx,0 ; if file # is 0
- X! jne again
- X! ENDIF
- X! cmp ovlfiloff,0 ; and offset is 0
- X! jne again
- X! jmp filsegtbllpp ; then we're still looking
- X! again:
- X dec ax
- X! loop ovloop
- X!
- X ASSUME ES:nothing ; prepare first memory block
- X
- X mov ax,ovlrootcode ; OVERLAY_AREA segment
- X***************
- X*** 711,717 ****
- X adc cx,0 ; position to code
- X mov ah,DOSSEEK ; lseek to code
- X mov al,0 ; from beginning of file
- X! mov bx,ovlexefilhdl ; never closing handle
- X int DOS
- X jc burnhead ; oops!
- X xor dx,dx ; buf = ds:0
- X--- 778,786 ----
- X adc cx,0 ; position to code
- X mov ah,DOSSEEK ; lseek to code
- X mov al,0 ; from beginning of file
- X! mov bl,ovlflg
- X! and bx,MASK file
- X! mov bx,ovlfilhdl[bx] ; never closing handle
- X int DOS
- X jc burnhead ; oops!
- X xor dx,dx ; buf = ds:0
- X***************
- X*** 727,733 ****
- X pop cx ; position of hdr
- X mov ah,DOSSEEK ; lseek to hdr
- X mov al,0 ; from beginning of file
- X! mov bx,ovlexefilhdl ; never closing handle
- X int DOS
- X jc burnhead ; oops!
- X mov cx,EXEHDRTMPSIZ ; reloc buffer size
- X--- 796,804 ----
- X pop cx ; position of hdr
- X mov ah,DOSSEEK ; lseek to hdr
- X mov al,0 ; from beginning of file
- X! mov bl,ovlflg
- X! and bx,MASK file
- X! mov bx,ovlfilhdl[bx] ; never closing handle
- X int DOS
- X jc burnhead ; oops!
- X mov cx,EXEHDRTMPSIZ ; reloc buffer size
- X***************
- X*** 771,777 ****
- X
- X ovlrlc PROC NEAR ; ds:0 -> the overlay to relocate
- X
- X! ASSUME DS:NOTHING,ES:NOTHING
- X
- X mov si,OFFSET hdr
- X mov bp,si
- X--- 842,848 ----
- X
- X ovlrlc PROC NEAR ; ds:0 -> the overlay to relocate
- X
- X! ASSUME DS:NOTHING,ES:ovltbl
- X
- X mov si,OFFSET hdr
- X mov bp,si
- X***************
- X*** 808,815 ****
- X inc si
- X add ax,pspadd ; now it is psp relative
- X add ax,di ; and now it is relative to the actual load address
- X! mov es,ax
- X! mov ax,es:[bx] ; pickup item to relocate
- X add ax,pspadd ; make it psp relative
- X cmp ax,ovlrootcode ; is it below the OVERLAY_AREA?
- X jc reloccomputed ; yup. it's relocated
- X--- 879,886 ----
- X inc si
- X add ax,pspadd ; now it is psp relative
- X add ax,di ; and now it is relative to the actual load address
- X! mov ds,ax
- X! mov ax,[bx] ; pickup item to relocate
- X add ax,pspadd ; make it psp relative
- X cmp ax,ovlrootcode ; is it below the OVERLAY_AREA?
- X jc reloccomputed ; yup. it's relocated
- X***************
- X*** 817,823 ****
- X jnc reloccomputed ; yup. it's relocated
- X add ax,di ; it's in OVERLAY_AREA, this one's ours.
- X reloccomputed:
- X! mov es:[bx],ax ; RAM it home!?!
- X loop dorelocs ; what goes around, comes around.
- X relocdone: ret
- X
- X--- 888,894 ----
- X jnc reloccomputed ; yup. it's relocated
- X add ax,di ; it's in OVERLAY_AREA, this one's ours.
- X reloccomputed:
- X! mov [bx],ax ; RAM it home!?!
- X loop dorelocs ; what goes around, comes around.
- X relocdone: ret
- X
- X***************
- X*** 827,833 ****
- X
- X getnxtreloc PROC NEAR
- X
- X! ASSUME DS:NOTHING,ES:NOTHING
- X
- X push bx
- X push cx
- X--- 898,904 ----
- X
- X getnxtreloc PROC NEAR
- X
- X! ASSUME DS:NOTHING,ES:ovltbl
- X
- X push bx
- X push cx
- X***************
- X*** 839,845 ****
- X mov dx,OFFSET hdr
- X mov ax,cs
- X mov ds,ax
- X! mov bx,ovlexefilhdl ; never closing handle
- X mov ah,DOSREAD ; prevent random DOS behaviour
- X int DOS ; read in header
- X jnc nxtrelocok
- X--- 910,918 ----
- X mov dx,OFFSET hdr
- X mov ax,cs
- X mov ds,ax
- X! mov bl,ovlflg
- X! and bx,MASK file
- X! mov bx,ovlfilhdl[bx] ; never closing handle
- X mov ah,DOSREAD ; prevent random DOS behaviour
- X int DOS ; read in header
- X jnc nxtrelocok
- X***************
- X*** 1122,1128 ****
- X mov ax,ds ; this is it!
- X mov cx,bx
- X sub cx,ax ; # of paragraphs between start of memory to release and mem blk
- X! jz nosplit
- X push es
- X call splitblk
- X or es:memblkflg,MASK_used ; set high block used
- X--- 1195,1201 ----
- X mov ax,ds ; this is it!
- X mov cx,bx
- X sub cx,ax ; # of paragraphs between start of memory to release and mem blk
- X! jz unsplit
- X push es
- X call splitblk
- X or es:memblkflg,MASK_used ; set high block used
- X***************
- X*** 1130,1136 ****
- X mov ax,es
- X mov ds,ax
- X pop es
- X! nosplit:
- X mov cx,es:ovlsiz
- X add cx,MEMCTLBLKSIZ ; paragraphs needed to load ovl
- X jmp splitblklow ; split remaining block
- X--- 1203,1209 ----
- X mov ax,es
- X mov ds,ax
- X pop es
- X! unsplit:
- X mov cx,es:ovlsiz
- X add cx,MEMCTLBLKSIZ ; paragraphs needed to load ovl
- X jmp splitblklow ; split remaining block
- X***************
- X*** 1620,1648 ****
- X
- X ASSUME DS:NOTHING,ES:NOTHING
- X
- X- push cx
- X- push ds
- X- mov ax,cs
- X- mov ds,ax
- X mov dx,OFFSET hdr ; a place to put it
- X! mov bx,ovlexefilhdl ; the file handle
- X mov cx,TYPE EXEHDR ; header size in bytes
- X mov ah,DOSREAD
- X int DOS ; read from file
- X! jc exegone ; oops
- X cmp ax,cx ; got correct number of bytes?
- X! jnz exegone ; nope
- X! pop ds
- X! pop cx
- X ret ; Wow, it worked!
- X exegone:
- X! mov al,HDRERR ; You lose!
- X! jmp putserr
- X
- X gethdr ENDP
- X
- X ;-------------------------------------------------------------------------------
- X
- X putserr PROC NEAR
- X
- X ; display error msg, close file, restore int vectors, free mem and return to DOS.
- X--- 1693,1886 ----
- X
- X ASSUME DS:NOTHING,ES:NOTHING
- X
- X mov dx,OFFSET hdr ; a place to put it
- X! mov bx,si
- X! shl bx,1
- X! mov bx,ovlfilhdl[bx] ; the file handle
- X! readagain:
- X mov cx,TYPE EXEHDR ; header size in bytes
- X mov ah,DOSREAD
- X int DOS ; read from file
- X! jc exegone ; oops?
- X cmp ax,cx ; got correct number of bytes?
- X! je gothdr
- X! IFNDEF NOSPLIT
- X! cmp ax,0 ; Anything?
- X! je gotonxtfil
- X! ENDIF
- X! jmp exerotten
- X! IFNDEF NOSPLIT
- X! gotonxtfil:
- X! inc si
- X! cmp si,MAXFILES+1
- X! je exegone ; We're out of files!
- X! mov bx,si
- X! shl bx,1
- X! cmp ovlfilhdl[bx],-1 ; Any more files?
- X! je gotonxtfil ; not here.
- X!
- X! mov bx,ovlfilhdl[bx] ; Slide in new handle
- X! xor bp,bp ; reset file offset
- X! jmp readagain
- X! ENDIF
- X! gothdr:
- X! cmp hdr.exesign,EXESIGNUM ; sanity check
- X! jne exerotten
- X!
- X ret ; Wow, it worked!
- X exegone:
- X! mov al,NOHDRERR ; missing overlays!
- X! jmp putserr ; You lose!
- X! IFNDEF NOSPLIT
- X! exerotten:
- X! mov al,HDRERR ; corruption!
- X! jmp putserr ; You lose!
- X! ENDIF
- X
- X gethdr ENDP
- X
- X ;-------------------------------------------------------------------------------
- X
- X+ openfiles PROC NEAR ; Find our cohorts in crime
- X+
- X+ push es
- X+ IFNDEF NOSPLIT
- X+ mov ah,DOSGETDTA ; Pick up DTA
- X+ int DOS ; and
- X+ mov dtaseg,es ; store
- X+ mov dtaoffset,bx ; it
- X+
- X+ push ds
- X+ mov dx,OFFSET ovldta ; Set new DTA for file search
- X+ mov ax,cs
- X+ mov ds,ax ; point to the right seg
- X+ mov ah,DOSSETDTA
- X+ int DOS
- X+ pop ds ; set this back for upcoming lodsb
- X+ ENDIF
- X+ mov cx,MAXNAMESIZE/2
- X+ mov bx,cs
- X+ mov es,bx
- X+ mov di, OFFSET filestring
- X+
- X+ rep movsw ; load path from si to di
- X+ IFNDEF NOSPLIT
- X+ mov di, OFFSET filestring
- X+ mov al,0
- X+ mov cx,MAXNAMESIZE
- X+ cld
- X+ repne scasb ; search null for end of string
- X+
- X+ sub cx,MAXNAMESIZE
- X+ neg cx
- X+ mov bx,cx
- X+
- X+ cmp cx,MAXNAMESIZE
- X+ je searchslash
- X+
- X+ dec bx ; keep string length
- X+ dec di ; cause were past null now
- X+
- X+ cmp bx,7
- X+ jle patherr ; "C:\.EXE" = 7
- X+ searchslash:
- X+ mov al,'\'
- X+ std
- X+ repne scasb ; search back for '\'
- X+ cld
- X+
- X+ mov dx,bx
- X+ sub dx,cx ; keep file name length
- X+ dec dx
- X+
- X+ mov cx,0 ; reset for upcoming loop
- X+ mov pathlen,bx ; hold these for recall
- X+ mov namelen,dx
- X+ cmp dx,12 ; "LONGNAME.EXE" = 12
- X+ jle openroot ; Path name too long?
- X+ patherr:
- X+ mov al,NAMERR ; real problems here.
- X+ jmp putserr
- X+ openroot:
- X+ ENDIF
- X+ mov ax,cs
- X+ mov ds,ax ; set ds to code
- X+
- X+ mov dx, OFFSET filestring ; open root code
- X+ mov al,0 ; access code
- X+ mov ah,DOSOPEN
- X+ int DOS ; open sez me
- X+ jnc dontdie
- X+
- X+ mov al,FILEERR ; can't open root
- X+ jmp putserr
- X+ dontdie:
- X+ mov ovlfilhdl[0],ax ; save handle in array
- X+ IFNDEF NOSPLIT
- X+ cmp namelen,11 ; Max sized exe name (8.3)?
- X+ jg bigfilename ; if not
- X+ inc pathlen ; add one to path length
- X+ inc namelen
- X+ bigfilename:
- X+ mov di,OFFSET filestring ; es is still code
- X+ add di,pathlen
- X+ sub di,5 ; append
- X+ mov si,OFFSET ovlext ; wildcard extension
- X+ mov cx,6 ; and null
- X+ rep movsb ; to filestring
- X+
- X+ mov cx,0 ; Match "normal" files
- X+ mov dx,OFFSET filestring
- X+ mov ah,DOSSEARCH
- X+ int DOS ; Set DTA with Wildcard.
- X+ jc aok ; Not a single match
- X+ mov cx,MAXFILES ; set upcoming loop
- X+ mov dx,namelen
- X+ sub pathlen,dx ; shorten absolute path
- X+ openloop:
- X+ push cx
- X+ mov bx,pathlen
- X+ mov di,OFFSET filestring ; es is still in code
- X+ add di,bx
- X+ mov si,OFFSET ovldta.file_name
- X+ mov cx,namelen ; since this *should* be
- X+ rep movsb
- X+ pop cx
- X+
- X+ mov dx,OFFSET filestring ; path to overlay file
- X+ mov al,0 ; access code
- X+ mov ah,DOSOPEN
- X+ int DOS ; open overlay file
- X+ jnc dontdie2
- X+ fileopenerr:
- X+ call itoa
- X+
- X+ mov al,OVLERR ; can't open file!
- X+ jmp putserr
- X+ dontdie2:
- X+ mov bx,cx ; put file number in bx
- X+ shl bx,1 ; 2 * bx for array index
- X+ mov ovlfilhdl[bx],ax ; save handle in array
- X+
- X+ mov ah,DOSNEXTFILE ; Look for more files
- X+ int DOS
- X+ jc aok
- X+
- X+ loop openloop ; open only 15 overlays
- X+ aok:
- X+ mov dx,dtaoffset ; Time to unset DTA
- X+ mov ds,dtaseg
- X+ mov ah,DOSSETDTA
- X+ int DOS
- X+ ENDIF
- X+ pop es
- X+
- X+ ret
- X+
- X+ openfiles ENDP
- X+
- X+ ;-------------------------------------------------------------------------------
- X+
- X putserr PROC NEAR
- X
- X ; display error msg, close file, restore int vectors, free mem and return to DOS.
- X***************
- X*** 1739,1750 ****
- X add si,2
- X loop freeemsmemlp
- X closefile:
- X! mov bx,ovlexefilhdl ; get file handle
- X cmp bx,-1 ; was the file ever opened?
- X jz byebye ; nope
- X mov ah,DOSCLOSE ; close it
- X int DOS
- X byebye:
- X pop ax ; return code in al
- X mov ah,TERMINATE
- X int DOS ; terminate this process
- X--- 1977,2000 ----
- X add si,2
- X loop freeemsmemlp
- X closefile:
- X! IFNDEF NOSPLIT
- X! mov cx,MAXFILES+1
- X! nextfile:
- X! mov bx,cx
- X! dec bx
- X! shl bx,1
- X! mov bx,ovlfilhdl[bx] ; get file handle
- X! ELSE
- X! mov bx,ovlfilhdl[0]
- X! ENDIF
- X cmp bx,-1 ; was the file ever opened?
- X jz byebye ; nope
- X mov ah,DOSCLOSE ; close it
- X int DOS
- X byebye:
- X+ IFNDEF NOSPLIT
- X+ loop nextfile
- X+ ENDIF
- X pop ax ; return code in al
- X mov ah,TERMINATE
- X int DOS ; terminate this process
- X***************
- X*** 1782,1787 ****
- X--- 2032,2038 ----
- X
- X nibble PROC NEAR
- X
- X+ push ax
- X and al,0fh
- X add al,30h
- X cmp al,3ah
- X***************
- X*** 1788,1796 ****
- X--- 2039,2050 ----
- X jc nibok
- X add al,7
- X nibok:
- X+ push dx
- X mov dl,al
- X mov ah,DOSPUTC
- X int DOS
- X+ pop dx
- X+ pop ax
- X ret
- X
- X nibble ENDP
- X*** others/pcmain.c Thu May 31 00:00:34 1990
- X--- others/pcmain.c Sat Jan 5 15:01:44 1991
- X***************
- X*** 107,123 ****
- X #endif
- X #ifdef MACOS
- X AppFile theFile;
- X! short message,numFiles;
- X SFReply reply;
- X
- X initterm(24,80);
- X ObscureCursor();
- X # ifdef SMALLDATA
- X init_decl();
- X # endif
- X /* user might have started up with a save file, so check */
- X! CountAppFiles(&message,&numFiles);
- X! if (!message && numFiles) {
- X message = 1;
- X
- X while(message <= numFiles) {
- X--- 107,131 ----
- X #endif
- X #ifdef MACOS
- X AppFile theFile;
- X! short message,numFiles,wizBang = FALSE;
- X SFReply reply;
- X
- X initterm(24,80);
- X+ /* check to see if is a special "wiz bang" start */
- X+ if (! strcmp(plname, "wizard")) wizBang = TRUE;
- X+
- X ObscureCursor();
- X # ifdef SMALLDATA
- X init_decl();
- X # endif
- X /* user might have started up with a save file, so check */
- X! /* however, a "wiz bang" start takes precedence */
- X! if (wizBang) {
- X! Strcpy(SAVEF, plname);
- X! numFiles = 0;
- X! } else CountAppFiles(&message,&numFiles);
- X!
- X! if (numFiles && !message) {
- X message = 1;
- X
- X while(message <= numFiles) {
- X***************
- X*** 392,398 ****
- X /* initialize static monster strength array */
- X init_monstr();
- X #ifdef MACOS
- X! if (!numFiles) {
- X askname();
- X if(justscores){
- X prscore(1,&classes);
- X--- 400,408 ----
- X /* initialize static monster strength array */
- X init_monstr();
- X #ifdef MACOS
- X! if (wizBang) wizard = TRUE;
- X!
- X! if (!wizBang && !numFiles) {
- X askname();
- X if(justscores){
- X prscore(1,&classes);
- X***************
- X*** 519,525 ****
- X flags.moonphase = phase_of_the_moon();
- X if(flags.moonphase == FULL_MOON) {
- X You("are lucky! Full moon tonight.");
- X! if(!u.uluck) change_luck(1);
- X } else if(flags.moonphase == NEW_MOON) {
- X pline("Be careful! New moon tonight.");
- X }
- X--- 529,535 ----
- X flags.moonphase = phase_of_the_moon();
- X if(flags.moonphase == FULL_MOON) {
- X You("are lucky! Full moon tonight.");
- X! change_luck(1);
- X } else if(flags.moonphase == NEW_MOON) {
- X pline("Be careful! New moon tonight.");
- X }
- X*** others/random.c Mon Apr 23 21:56:28 1990
- X--- others/random.c Thu Jan 31 13:35:42 1991
- X***************
- X*** 26,40 ****
- X * - ANSI function prototyping in extern.h - therefore include hack.h
- X * instead of stdio.h and remove separate declaration of random() from
- X * the beginning of function srandom
- X */
- X
- X #ifdef LIBC_SCCS
- X # ifndef lint
- X static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88";
- X # endif
- X #endif /* LIBC_SCCS and not lint */
- X-
- X- #include "hack.h"
- X
- X /*
- X * random.c:
- X--- 26,42 ----
- X * - ANSI function prototyping in extern.h - therefore include hack.h
- X * instead of stdio.h and remove separate declaration of random() from
- X * the beginning of function srandom
- X+ * - moving sccsid after hack.h to allow precompiled headers, which
- X+ * means the defined()s would be ok again...
- X */
- X
- X+ #include "hack.h"
- X+
- X #ifdef LIBC_SCCS
- X # ifndef lint
- X static char sccsid[] = "@(#)random.c 5.5 (Berkeley) 7/6/88";
- X # endif
- X #endif /* LIBC_SCCS and not lint */
- X
- X /*
- X * random.c:
- X*** others/termcap Sun May 20 20:02:42 1990
- X--- others/termcap Sat Jan 5 14:59:05 1991
- X***************
- X*** 91,97 ****
- X :so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
- X :mb=2\E[5m:md=2\E[1m:mr=2\E[7m:me=2\E[m:\
- X :ti=4\E<\E(B\E)0:as=^N:ae=^O:\
- X! :ks=\E[?1h\E=:ke=\E[?11\E>:ku=\E[A:kd=\E[B:kl=\E[C:kr=\E[D:kb=^H:\
- X :kn#4:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
- X :sc=\E7:ec=\E8:sr=5\EM:
- X #
- X--- 91,97 ----
- X :so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
- X :mb=2\E[5m:md=2\E[1m:mr=2\E[7m:me=2\E[m:\
- X :ti=4\E<\E(B\E)0:as=^N:ae=^O:\
- X! :ks=\E[?1h\E=:ke=\E[?1l\E>:ku=\E[A:kd=\E[B:kl=\E[C:kr=\E[D:kb=^H:\
- X :kn#4:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
- X :sc=\E7:ec=\E8:sr=5\EM:
- X #
- X***************
- X*** 104,109 ****
- X--- 104,111 ----
- X :ic=5\E[@:tc=vt102:
- X vt300|vt300-80|vt320|vt330|vt340|VT300_Series:\
- X :tc=vt200:
- X+ vt400|vt400-80|vt420|VT400_Series:\
- X+ :tc=vt300:
- X # VAXstations (should have full entries with no delays and 8-bit CSI's)
- X VWS|UIS:tc=vt200:
- X DECterm:tc=vt300:
- X
- END_OF_FILE
- if test 50321 -ne `wc -c <'patch10.04'`; then
- echo shar: \"'patch10.04'\" unpacked with wrong size!
- fi
- # end of 'patch10.04'
- echo shar: End of archive 4 \(of 8\).
- cp /dev/null ark4isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 8 archives.
- rm -f ark[1-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-